home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Mark.h < prev    next >
C/C++ Source or Header  |  1992-04-27  |  2KB  |  103 lines

  1. #ifndef Marks_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define Marks_First
  7.  
  8. #include "Object.h"
  9.  
  10. //---- constants passed to DoObserve to the dependents of a mark
  11.  
  12. enum eMarkChanges  {
  13.     eMarkNone = 0,
  14.     eMarkDeleted,      // mark deleted
  15.     eMarkLength,       // text in mark range changed
  16.     eMarkPos           // position of the mark changed
  17. };
  18.  
  19. //---- states of a mark
  20.  
  21. enum eMarkState { 
  22.     eStateNone = 0, 
  23.     eStateDeleted = 1,  
  24.     eStateChanged = 2,     
  25. };
  26.  
  27. enum eMarkFlags {
  28.     eMarkInclStart  =   BIT(eObjLast+1),
  29.     eMarkFixedSize  =   BIT(eObjLast+2),
  30.     eMarkLocked     =   BIT(eObjLast+3),   // mark won't move     
  31.     eMarkDefault    =   eMarkInclStart,
  32.     eMarkLast       =   eObjLast + 3
  33. };
  34.  
  35. //---- class Mark -------------------------------------------------------
  36.  
  37. class Mark: public Object {
  38. public:
  39.     int pos, len, state;
  40.  
  41. public:
  42.     MetaDef(Mark);
  43.     Mark(int p= 0, int l= 0, eMarkState s= eStateNone, eMarkFlags f= eMarkDefault);
  44.     Mark(Mark *m);
  45.     void ChangeMark (int p, int l, int s= 0)
  46.     { pos = p; len = l; state = s; }
  47.     bool HasChanged(int start, int len);
  48.     int Len()
  49.     { return len; }
  50.     int Pos()
  51.     { return pos; }
  52.     int End()
  53.     { return pos+len; }
  54.     eMarkState State()
  55.     { return (eMarkState)state; }
  56.     void Lock()
  57.     { SetFlag(eMarkLocked); }
  58.     void Unlock()
  59.     { ResetFlag(eMarkLocked); }
  60.     int Compare (Object* op);
  61.     
  62.     //---- editing
  63.     void Cut(int at, int len); 
  64.     void Paste(int at, int len);
  65.     void Change(int at, int len);
  66.     
  67.     //---- generic
  68.     Object *deepclone();
  69.     OStream& PrintOn(OStream&);
  70.     IStream& ReadFrom(IStream&);
  71. };
  72.  
  73. //---- class MarkList -------------------------------------------------------
  74.  
  75. class MarkList: public Object {
  76.     class SeqCollection *marks;
  77.     bool doRemove;
  78. public:
  79.     MetaDef(MarkList);
  80.     MarkList(bool doRemove = FALSE, SeqCollection *rep= 0); 
  81.         // remove the deleted marks from the marklist?, 
  82.         // representation of marklist
  83.     ~MarkList();
  84.      
  85.     void Add(Mark *m);                  
  86.     Mark *Remove(Mark *m);
  87.     Iterator *MakeIterator();
  88.     int Size();
  89.     void FreeAll();
  90.     void Empty();
  91.     Mark *At(int i);
  92.     
  93.     //---- editing                 
  94.     void Replace(int from, int to, int n);      
  95.     void RangeChanged(int at, int len); // mark marks in the given range as changed
  96.     
  97.     //---- object I/O
  98.     OStream& PrintOn(OStream&);
  99.     IStream& ReadFrom(IStream&);
  100. };
  101.  
  102. #endif     
  103.